<?php
require_once 'protoweb/detalles_ventas_protoweb.php';

/**
 * @package sisco
 * @subpackage controller
 */
class Detalles_Ventas extends Detalles_Ventas_protoweb
{
    public function create()
    {
        // chequeo y obtengo el usuario loggeado
        $data['logueado'] = $this->getUsuarioLogueado();

        // valido permisos
        $gruposValidos = array('venta');
        // ej. array('venta','logistica','contable','directivo');
        $this->validarPermisos($data['logueado'], $gruposValidos);

        // Get an empty object
        $data['detalle_venta'] = new Detalle_Venta();

        // Message Handler
        $data['msg'] = new PwMsgHandler();

        // prepare object attributes
        $this->createPrepare($data);

        // if posting, try to save the new object
        if ($this->input->server('REQUEST_METHOD') === 'POST') {
            $this->create_save($data);
        }

        // load view
        $this->smartyview->render('detalle_venta_create.html', $data);

    } // function create

    private function create_save($data) 
    {
        $data['oferta'] = new Oferta();
        
        // assignCreatePost is defined on parent class and 
        // will assign all posting values to your attributes's class 
        // based on purposes definitions
        if ($this->assignCreatePost($data)) {

            // You could customize attributes here
            $data['detalle_venta']->precio_total =
                round($data['detalle_venta']->precio_unitario*$data['detalle_venta']->cantidad,2);
            
            if ($data['oferta']->id) {
                $data['detalle_venta']->descuento = round($data['detalle_venta']->precio_total*($data['oferta']->porcentaje/100),2);
                $data['detalle_venta']->precio_total -= $data['detalle_venta']->descuento;
            }
            
            // Saving Object (feel free to edit)
            if ($this->saveEntity($data)) { 
            
                // post processing object attributes
                $this->afterCreateSuccess($data);

                // Show success message in next view
                $data['msg']->success = 'Item creado correctamente';
                $data['msg']->persistSuccess();

                // responde con éxito
                $respuesta = array(
                    'responseType' => 'success_html',
                    'response'     => $this->smartyview->smarty->fetch('detalle_venta_item.html', $data),
                    'sumatoria'	   => sprintf('%.2f',$this->calcularTotal($data['venta']->id))
                );
                
                die(json_encode($respuesta));
            }
            else { 
                
                // revert attributes changes if necesary
                $this->revertOnCreateError($data);

                // Append model's errors
                $data['msg']->error .= $data['detalle_venta']->error->string;
                
                // responde con error
                $respuesta = array(
                    'responseType' => 'error_html',
                    'response'     => $data['detalle_venta']->error->string
                );
                
                die(json_encode($respuesta));
            }
        } // if assignCreatePost
    } // function create_save

    public function delete($id)
    {
        // chequeo y obtengo el usuario loggeado
        $data['logueado'] = $this->getUsuarioLogueado();

        // valido permisos
        $gruposValidos = array('venta');
        // ej. array('venta','logistica','contable','directivo');
        $this->validarPermisos($data['logueado'], $gruposValidos);

        // get object to delete
        $data['detalle_venta'] = new Detalle_Venta($id);
		$data['venta'] = new Venta($data['detalle_venta']->venta->id);
        
        if ($data['detalle_venta']->delete()) {

            // delete related actions based on purpose
            $this->afterDeleteSuccess($data);

            // Show success message in next view
            $data['msg']          = new PwMsgHandler();
            $data['msg']->success = 'Item borrado correctamente';
            $data['msg']->persistSuccess();

            // responde con éxito
            $respuesta = array(
                'responseType' => 'success_html',
                'sumatoria'	   => sprintf('%.2f',$this->calcularTotal($data['venta']->id))
            );
                
            die(json_encode($respuesta));
        }
        else {
            // responde con error
            $respuesta = array(
                'responseType' => 'error_html',
                'response'     => $data['detalle_venta']->error->string
            );
                
            die(json_encode($respuesta));
        }
    } // function delete
    
    private function calcularTotal($venta) {
        $sumatoria = new Detalle_Venta();
        $sumatoria->select_sum('precio_total')->where_related('venta','id',$venta)->get();
        $sumatoria = round($sumatoria->precio_total,2);
        return $sumatoria;
    } // private function calcularTotal
    
	public function __construct() 
	{
		parent::__construct();
	}

} // class Detalles_Ventas

/* End of file detalles_ventas.php */
/* Location: ./application/controllers/detalles_ventas.php */